package com.hundun.util;


import org.springframework.util.StringUtils;

import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public final class FontUtils {
    private static Map<String, File> fontMap = new HashMap<>();

    /*
     * 扫描所有的艺术字体包
     */
    static {
        InputStream resourceAsStream = FontUtils.class.getClassLoader().getResourceAsStream("application.properties");
        Properties properties = new Properties();
        try {
            properties.load(resourceAsStream);
            String fontFilePath = properties.getProperty("font.path");
            System.out.println(fontFilePath);
            if (StringUtils.isEmpty(fontFilePath)) {
                System.out.println("未配置艺术字体文件路径");
            } else {
                File file = new File(fontFilePath);
                File[] files = file.listFiles();
                if (files != null && files.length > 0){
                    for (File tempFile : files){
                        String fileName = tempFile.getName();
                        String fontName = fileName.substring(0, fileName.indexOf("."));
                        fontMap.put(fontName, tempFile);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                resourceAsStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     *  引入自定义的字体
     * @param fontName 字体样式
     * @param fontSize  字体大小
     * @return 字体对象
     */
    public static Font getFont(String fontName, float fontSize) {
        Font font = null;
        File file = fontMap.get(fontName);
        if (file != null){
            try(FileInputStream fileInputStream = new FileInputStream(file)) {
                Font tempFont = Font.createFont(Font.TRUETYPE_FONT, fileInputStream);
                //当参数为 float 类型，才是设置文字大小
                font = tempFont.deriveFont(fontSize);
            } catch (IOException | FontFormatException e) {
                e.printStackTrace();
            }
        }
        return font;
    }

    /**
     * 将字符串按照自定义的间隔写入
     * @param str   目标字符串
     * @param x     写入的位置的x轴
     * @param y     写入的位置的y轴
     * @param rate  写入间隔
     * @param g     画布
     * @param fontSize  字体的大小
     */
    public static void drawString(String str,int x,int y,int rate, Graphics2D g,int fontSize){
        String tempStr="";
        int tempx=x;
        while (str.length()>0){
            tempStr=str.substring(0, 1);
            str=str.substring(1, str.length());
            //使图形去除锯齿状，可以得到多么细腻的图形
            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            g.drawString(tempStr, tempx, y);
            tempx = tempx + fontSize - rate;
        }
    }

}
